Copyright(C) 1994 Terumasa KODAKA , Takeshi KONO ■HD BIOS HD BIOSの概要 o HD BIOSは、ハードディスク・MO・CD-ROM等にアクセスするためのBIOSである。 HD BIOSでは、AHの下位4ビットで動作を指定し、上位4ビットでその動作に 付随した機能の指定などを行う。このため、HD BIOSでは下位4ビットの 値を元に昇順に配列してある。 用語 SASI(SASI I/F, SASI HD, SASI BIOS) o SASI型は、PC-9800で最初にサポートされたハードディスクである。 本書では、SASI用ハードディスクインターフェースをSASI I/F、SASI型 ハードディスクドライブをSASI HD、これらを制御するBIOSをSASI BIOSと 呼ぶ。 o SASI HDは、SASI I/Fに2台まで接続できる。 SASI HDの容量は、NEC製品では1台あたり40Mバイトが最大だが、 サードパーティ製品にはそれ以上の容量を持つものがある。 o 拡張スロットに実装するSASI I/Fには、PC-9801-07・27がある。 SASI I/Fを内蔵している機種、内蔵ドライブを追加可能な機種もある。 o SASI BIOSは通常、ノーマルモード(PC-9801Mを除く)ではD7000〜D7FFFhに、 PC-9801MではD6000〜D6FFFhに配置される。ハイレゾモードでは 本体BIOS ROM(セグメントF800h)内に含まれている。 用語 SCSI(SCSI I/F, SCSI HD, SCSI BIOS) o SCSIは、大容量のハードディスクや各種の周辺機器を接続するために 導入された。 本書では、SCSI用ハードディスクインターフェースをSCSI I/F、SCSI型 ハードディスクドライブをSCSI HD、これらを制御するBIOSをSCSI BIOSと 呼ぶ。 o SCSI I/F上のBIOS ROM内には、SCSI BIOSとともに、SCSI機器全般を 制御できるSCSIインターフェース共通BIOSも含まれている。 SCSI BIOSとSCSIインターフェース共通BIOSは、両方ともINT 1Bhで 呼び出す。DA/UAの値により、どちらかが選択される。 o SCSI I/Fには、SCSI機器を最大7台まで接続できる。ただし、MS-DOSでは ソフトウェア上の仕様の制限で、ハードディスクは最大4台までしか認識 しない。 SCSI I/Fには、MOやCD-ROM(SCSI対応)を接続することもできる。これらの 機器にも、SCSI BIOSでアクセス可能。 o 拡張スロットに実装するSCSI I/Fには、PC-9801-55・55L・55U・92, PC-H98-B03・B12がある。 SCSI I/Fを内蔵している機種、内蔵ドライブを追加可能な機種もある。 SCSI I/Fには、CD-ROM接続用にPC-9801-55よりも前に発売されたPC-9801-50 という製品があるが、本書では取り上げない。 o MS-DOSは、バージョン3.3以降の製品からSCSI HDに対応している。MS-DOS 3.1 以前の製品は、SCSI HDに対応していない。 3.5"MOは、バージョン5.0以降で対応している。 o SCSI BIOSは通常、ノーマルモード(PC-9801・E・F・Mを除く)ではDC000〜DCFFFh に、PC-9801・E・F・MではD4000〜D4FFFhに配置される。ハイレゾモードでは EC000〜ECFFFhに配置される。 ただし、PC-H98-B03・B12、およびそれと互換性のあるH98内蔵SCSIのBIOSは、 セットアップ時にROMアドレスが決定される。また、BIOSのサイズは 8Kバイトである。 u PC-9801-55・55L・55U,PC-H98-B03(および互換内蔵型SCSI I/F)では、SCSIの INQUIRYコマンドで得られるベンダ名の先頭3バイトが"NEC"でないハード ディスクは接続できない。MOやCD-ROMにはこのような制限はない。 PC-9801-92,PC-H98-B12(および互換内蔵型SCSI I/F)では、ベンダ名 チェックは行わない。 o SASI I/Fと共存させることが可能。 用語 ESDI(ESDI I/F, ESDI HD, ESDI BIOS) o ESDIは、PC-H98の内蔵ドライブで導入された。 本書では、ESDI用ハードディスクインターフェースをESDI I/F、ESDI型 ハードディスクドライブをESDI HD、これらを制御するBIOSをESDI BIOSと 呼ぶ。 o ESDI型H98内蔵ハードディスクには、PC-H98/70-E01・E02・E03,PC-H98S/8-E01が ある。 PC-H98/70-E01・03,PC-H98S/8-E01には、外部にSASI HDを増設することが できる。このSASI HDはESDI BIOSが制御する。 o MS-DOSは、バージョン3.3B以降の製品からESDI HDに正式対応している。実際 にはバージョン3.3(PS98-013)から対応。MS-DOS 3.1以前の製品は、 ESDI HDに対応していない。 o ESDI BIOSは、セットアップ時にROMアドレスが決定される。BIOSのサイズは 8Kバイトである。 o SASI I/F、SCSI I/Fと共存させることが可能。 用語 IDE(IDE I/F, IDE HD, IDE BIOS, IDE CD-ROM) o IDEは、98NOTEに内蔵するための2.5インチハードディスクで最初に導入 された。その後、性能面・価格面での優位性から、デスクトップでも 採用された。内蔵型のみ存在する。 本書では、IDE用ハードディスクインターフェースをIDE I/F、IDE型 ハードディスクドライブをIDE HD、これらを制御するBIOSをIDE BIOSと 呼ぶ。 o IDE HDは98NOTE,PC-9821,PC-9801UR・US・BA・BX・BA2・BS2・BX2,PC-H98Tに 内蔵できる。 PC-9821Bp・Bs・Be,PC-9801BA2・BS2・BX2では、2台目のIDEが使用可能。その 他の機種では1台だけ使用できる。 2台目のIDEは、ハードディスクかCD-ROMかを選択できる。IDE I/Fに接続 されたCD-ROMをIDE CD-ROMと呼ぶ。 o IDE BIOSは通常、ノーマルモードではD8000〜DBFFFhに配置される。ハイレゾ モードではE6000〜E9FFFhに配置される。 98NOTEを除くIDEサポート機では、IDE HD/CD-ROMを内蔵したときだけ IDE BIOSが出現する。 98NOTEのIDE BIOSは、RAMドライブやシステム制御用のBIOSと同じアドレスに 存在する。 o BIOSレベルではSASI BIOSと互換性がある。40Mバイト以下の容量であれば、 バージョン3.1以前のMS-DOSでも使用できる。40Mバイトを超える容量の 場合は、MS-DOS 3.3以降が必要。 o SCSI I/Fと共存させることが可能。ESDIとIDEを両方内蔵できる機種はない。 IDE BIOSが出現している場合には、SASI I/Fは使用できない。 用語 リニアセクタアドレス o アクセスするセクタを指定する方法のひとつ。ディスク内の全セクタに 対して、0から始まる連続した番号をつけ、その番号でセクタを指定する 方法。一次元の配列(配列の1要素が1セクタ)のようなイメージでアクセス できる。 u MOやCD-ROMにアクセスする場合は、リニアセクタアドレスを用いる。 用語 絶対セクタアドレス o アクセスするセクタを指定する方法のひとつ。セクタを指定するとき、 シリンダ番号・ヘッド番号・トラック内のセクタ番号を用いる。 u MOやCD-ROMにアクセスする場合は、絶対セクタアドレスを使用しないほうが 良い。 用語 DA/UA o DISK BIOSでは、アクセスする装置名を指定するために、DA/UA (Device Address/Unit Address)と呼ばれる値を用いる。 上位4bitのDAで装置の種類を指定する。下位4bitのUAで同種の装置のなかの 何台目のドライブかを指定する。 たとえば、SASI I/Fに接続された1台目のHDDを指定する場合はDA/UA=80h、 2台目を指定する場合はDA/UA=81hとする。 SCSI I/Fに接続されたデバイスの場合は、UAにSCSI IDと同じ値を指定する。 o HD BIOSでは、アクセスするセクタを指定する方法が2種類 (リニアセクタアドレスと絶対セクタアドレス)用意されている。 同じドライブに対して、セクタ指定の方法ごとに、DAの値が割り当てられて いる (表:「HD BIOSのセクタ指定方法とDA/UAの対応」参照)。 たとえば、SCSI ID 0のHDDでリニアセクタアドレスでアクセスするには、 DA/UA=20hを指定する。絶対セクタアドレスでアクセスするには、DA/UA=A0h を指定する。IDEの2台目のHDDにリニアセクタアドレスでアクセスするには、 DA/UA=01hを指定する。 表 HD BIOSのセクタ指定方法とDA/UAの対応 ----------------+-------------+------------- \セクタ指定方法|リニアセクタ |絶対セクタ インターフェース種別 \| アドレス| アドレス ----------------+-------------+------------- SASI・ESDI・IDE | 00〜03h | 80〜83h SCSI | 20〜26h | A0〜A6h ----------------+-------------+------------- * n=装置番号 o 参考のため、DA/UAの一覧を表「全DA/UAとデバイスの対応一覧」に示す。 表 全DA/UAとデバイスの対応一覧 -------+--------------------------------------------------------------- DA/UA |デバイス -------+--------------------------------------------------------------- 00h |SASI・IDE HD #1(リニアセクタアドレス指定) 01h |SASI・IDE HD/CD-ROM #2(リニアセクタアドレス指定) 02h |ESDI HD(リニアセクタアドレス指定) 03h |SASI HD(ESDI I/F接続)(リニアセクタアドレス指定) 04〜07h|NECCD.SYSで使用 10〜13h|両用BIOS - 1MB I/Fモード+640KBアクセスモード 20h |SCSI HD/MO/CD-ROM : SCSI ID=0(リニアセクタアドレス指定) 21h |SCSI HD/MO/CD-ROM : SCSI ID=1(リニアセクタアドレス指定) 22h |SCSI HD/MO/CD-ROM : SCSI ID=2(リニアセクタアドレス指定) 23h |SCSI HD/MO/CD-ROM : SCSI ID=3(リニアセクタアドレス指定) 24h |SCSI HD/MO/CD-ROM : SCSI ID=4(リニアセクタアドレス指定) 25h |SCSI HD/MO/CD-ROM : SCSI ID=5(リニアセクタアドレス指定) 26h |SCSI HD/MO/CD-ROM : SCSI ID=6(リニアセクタアドレス指定) 30〜33h|両用BIOS - 1MB I/Fモード+1.44MBアクセスモード 40h |RAMドライブBIOSイニシャライズ用 50〜53h|320KB FD BIOS 60〜63h|BRANCH 4670仮想ディスク 70〜73h|640KB専用BIOS,両用BIOS - 640KB I/Fモード+640KBアクセスモード 80h |SASI・IDE HD #1(絶対セクタアドレス指定) 81h |SASI・IDE HD/CD-ROM #2(絶対セクタアドレス指定) 82h |ESDI HD(絶対セクタアドレス指定) 83h |SASI HD(ESDI I/F接続)(絶対セクタアドレス指定) 84〜87h|NECCD.SYSで使用 90〜93h|1MB専用BIOS,両用BIOS - 1MB I/Fモード+1MBアクセスモード A0h |SCSI HD/MO/CD-ROM : SCSI ID=0(絶対セクタアドレス指定) A1h |SCSI HD/MO/CD-ROM : SCSI ID=1(絶対セクタアドレス指定) A2h |SCSI HD/MO/CD-ROM : SCSI ID=2(絶対セクタアドレス指定) A3h |SCSI HD/MO/CD-ROM : SCSI ID=3(絶対セクタアドレス指定) A4h |SCSI HD/MO/CD-ROM : SCSI ID=4(絶対セクタアドレス指定) A5h |SCSI HD/MO/CD-ROM : SCSI ID=5(絶対セクタアドレス指定) A6h |SCSI HD/MO/CD-ROM : SCSI ID=6(絶対セクタアドレス指定) B0〜B3h|両用BIOS - 1MB I/Fモード+1.44MBアクセスモード(Undocumented) C0h |SCSI DEVICE: SCSI ID=0 C1h |SCSI DEVICE: SCSI ID=1 C2h |SCSI DEVICE: SCSI ID=2 C3h |SCSI DEVICE: SCSI ID=3 C4h |SCSI DEVICE: SCSI ID=4 C5h |SCSI DEVICE: SCSI ID=5 C6h |SCSI DEVICE: SCSI ID=6 D0h |ROMドライブ(DISK BIOSでのアクセスは不可) D1h |PCMCIAメモリカード(DISK BIOSでのアクセスは不可) E0h |RAMDISK.SYS F0〜F3h|両用BIOS - 640KB I/Fモード+1MBアクセスモード -------+--------------------------------------------------------------- ■リターンコード一覧 ---------------+---+------------------------------------ AH |CF |内容 ---------------+---+------------------------------------ 0000xxxxb(00h) | 0 | Normal End 00001xxxb(08h) | 0 | Corrected Data 0001xxxxb(10h) | 0 | Control Mark 0010xxxxb(20h) | 1 | DMA Boundary 00111xxxb(38h) | 1 | Illegal Disk Address 0100xxxxb(40h) | 1 | Equipment Check 0101xxxxb(50h) | 1 | Over Run 0110xxxxb(60h) | 1 | Not Ready 1110xxxxb(70h) | 1 | Not Writable 10001xxxb(88h) | 1 | Direct Access an Alternate Track 1001xxxxb(90h) | 1 | Time Out 1010xxxxb(A0h) | 1 | Data Error (ID) 1011xxxxb(B0h) | 1 | Data Error (Data) 10111xxxb(B8h) | 1 | Data Error 1100xxxxb(C0h) | 1 | No Data 11001xxxb(C8h) | 1 | Seek Error 11011xxxb(D8h) | 1 | Unreadable Alternate Track 1110xxxxb(E0h) | 1 | Missing Address Mark (ID) 1111xxxxb(F0h) | 1 | Missing Address Mark (Data) ---------------+---+------------------------------------ INT 1Bh - Function 00h(SASI) 分類 SASI BIOS 名前 指定シリンダへのシーク Undocumented 対象 SASI(PC-9801VX4以降のノーマル内蔵型) 入力 AH=x0h(xは任意) AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI |リニアセクタアドレス |00h,01h SASI |絶対セクタアドレス |80h,81h ------------+----------------------+----------- ■リニアセクタアドレス指定時 DX:CX=リニアセクタアドレス(0〜) ■絶対セクタアドレス指定時 CX=シリンダ番号(0〜) DH=ヘッド番号(0〜) DL=00h 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 10h(CF=0)|Control Mark |一定時間以内にシークが完了しなかった 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない 90h(CF=1)|Time Out |デバイスが接続されていない ---------+------------------------------------------ 解説 o 指定されたセクタの存在するシリンダにヘッドをシークさせる。 o このファンクションは、PC-9801VX4以降のノーマルモード内蔵型 SASI BIOSにのみ存在する。PC-9801-27、SCSI・ESDI・IDE BIOS、 ハイレゾモードのSASI BIOS等には存在しない。 関連 INT 1Bh - Function B0h(SCSI) 分類 DISK BIOS 名前 WD33C93へのコマンド送信 Undocumented 対象 SCSI(PC-9801-55初代を除く) 入力 AH=D0h ------------+----------- デバイス種別|DA/UA値 ------------+----------- SCSI |20〜26h,A0〜A6h ------------+----------- DS:SI=WD33C93に送信するコマンドを格納したメモリの先頭アドレス DX =WD33C93に送信するコマンドのサイズ(単位:バイト) ES:BP=SCSI機器との送受信バッファの先頭アドレス BX =SCSI機器との送受信バッファのサイズ(単位:バイト) 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o SCSI I/F上のWD33C93(SCSIコントローラ)にコマンドを送り、データを 送受信する。 o DS:SI(ES:BP)とDX(BX)は、指定領域が物理アドレスの64Kバイトの境界を 跨がないように設定する必要がある。たとえば、DS:SI=7000:FF00h, DX=0400h のような領域を指定することはできない。 関連 INT 1Bh - Function D0h(IDE) 分類 DISK BIOS 名前 モータ状態取得の準備 Undocumented 対象 IDE 入力 AH=D0h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- IDE |00h,01h,80h,81h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o IDE HDにPowerCommand(E5hモータ状態のセンス)を送る。 結果は出力レジスタには反映されない。 o このファンクションを実行した直後に、I/O 0644h(SectorCount)から 読み出しを行なうと、IDE HDのモータ回転状態が返される。 -------------+-------------------------------- I/O 0644hの値|モータの状態 -------------+-------------------------------- FFh |モータ回転中 00h |モータ停止中 BBh |パワーロック(PC-9800では使用していない) -------------+-------------------------------- 関連 INT 1Bh - Function E0h(IDE) INT 1Bh - Function F0h(IDE) 0000:0457h I/O 0644h INT 1Bh - Function E0h(IDE) 分類 DISK BIOS 名前 MOTOR ON Undocumented 対象 IDE 入力 AH=E0h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- IDE |00h,01h,80h,81h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o IDE HDのスピンドルモータをONする。 o このファンクションを実行しなくても、ハードディスクにアクセスする ファンクションを実行すれば、モータは自動的にONになる。ただし、 READY状態になるまで通常4〜5秒かかる。 関連 INT 1Bh - Function D0h(IDE) INT 1Bh - Function F0h(IDE) INT 17h(外部割り込み…IDE) 0000:0457h INT 1Bh - Function F0h(IDE) 分類 DISK BIOS 名前 MOTOR OFF Undocumented 対象 IDE 入力 AH=F0h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- IDE |00h,01h,80h,81h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o IDE HDのスピンドルモータをOFFする。 o ハードディスクにアクセスするファンクションを実行すると、モータは 自動的にONになる。ただし、READY状態になるまで通常4〜5秒かかる。 関連 INT 1Bh - Function D0h(IDE) INT 1Bh - Function E0h(IDE) INT 1Fh - Function 9A07h INT 17h(外部割り込み…IDE) 0000:0457h INT 1Bh - Function 01h(SASI/SCSI/ESDI/IDE) 分類 DISK BIOS 名前 ベリファイ(VERIFY) 対象 SASI, SCSI, ESDI, IDE 入力 AH= ■[SASI・ESDI・IDE] bit 7,6=00b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=0001b ■[SCSI] bit 7=0 bit 6=e 1=エラーセクタ通知あり 0=エラーセクタ通知なし bit 5,4=00b bit 3〜0=0001b AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI・IDE |リニアセクタアドレス |00h,01h,03h SASI・IDE |絶対セクタアドレス |80h,81h,83h ESDI |リニアセクタアドレス |02h ESDI |絶対セクタアドレス |82h SCSI |リニアセクタアドレス |20〜26h SCSI |絶対セクタアドレス |A0〜A6h ------------+----------------------+----------- BX=転送バイト数 ■リニアセクタアドレス指定時 DX:CX=リニアセクタアドレス(0〜) ■絶対セクタアドレス指定時 CX=シリンダ番号(0〜) DH=ヘッド番号(0〜) DL=セクタ番号(0〜) ES:BP=転送アドレス 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 ■[SCSI] AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき DX,CX=エラーセクタアドレス 解説 o 指定されたセクタを読み取り、リターンコードを返す。 u メモリへの転送は行わないが、INT 1Bh - Function 06h(SASI/SCSI/ESDI/IDE) と同じように入力パラメータのチェックが行われるので、以下の条件を 守らなければエラーになる。 o ES:BP(転送アドレス)とBX(転送バイト数)は、指定領域が物理アドレスの 64Kバイトの境界を跨がないように設定する必要がある。たとえば、 ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。 これに反したとき、SASI・ESDI・IDE BIOSではDMAバウンダリエラーが起きる。 o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。 セクタ長で割り切れない値を指定すると、端数は切り捨てられる。 u BX(転送バイト数)に0000hを指定すると、64Kバイトのリードを 行う。(Undocumented) ただし、リードを行わずに異常終了するBIOSもある模様。 u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SASI・ESDI BIOSはハング する。SCSI BIOSはリードせずに正常終了する。IDE BIOSは64Kバイトリード する。 o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6 (SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する 場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この ビットが0のときは、従来互換のダイレクトモードである。 ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、 インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ 上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの アドレスを指定する。 インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに 戻される。 関連 INT 1Bh - Function 02h(SCSI) 0000:0590h INT 1Bh - Function 02h(SCSI) 分類 DISK BIOS 名前 データの書き込みとベリファイ (WRITE&VERIFY) 対象 SCSI 入力 AH bit 7=0 bit 6=e 1=エラーセクタ通知あり 0=エラーセクタ通知なし bit 5,4=00b bit 3〜0=0010b AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SCSI |リニアセクタアドレス |20〜26h SCSI |絶対セクタアドレス |A0〜A6h ------------+----------------------+----------- BX=転送バイト数 ■リニアセクタアドレス指定時 DX:CX=リニアセクタアドレス(0〜) ■絶対セクタアドレス指定時 CX=シリンダ番号(0〜) DH=ヘッド番号(0〜) DL=セクタ番号(0〜) ES:BP=転送アドレス 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 ■AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき DX,CX=エラーセクタアドレス 解説 o 指定されたセクタにデータを書き込んだあと、ベリファイを行う。 リニアセクタアドレス指定を用いれば、MOへの書き込みも行える。 o ES:BP(転送アドレス)とBX(転送バイト数)は、転送領域が物理アドレスの 64Kバイトの境界を跨がないように設定する必要がある。たとえば、 ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。 u SCSI BIOSはDMAバウンダリのチェックをしていない。転送領域がセグメントを 跨いでいると、セグメント内でラップアラウンドが起きるので注意が必要。 o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。 セクタ長で割り切れない値を指定すると、端数は切り捨てられる。 u BX(転送バイト数)に0000hを指定すると、64Kバイトの転送を 行う。(Undocumented) ただし、転送を行わずに異常終了するBIOSもある模様。 u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SCSI BIOSは転送せずに 正常終了する。 o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6 (SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する 場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この ビットが0のときは、従来互換のダイレクトモードである。 ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、 インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ 上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの アドレスを指定する。 インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに 戻される。 関連 INT 1Bh - Function 01h(SASI/SCSI/ESDI/IDE) INT 1Bh - Function 05h(SASI/SCSI/ESDI/IDE) INT 1Bh - Function 03h(SASI/SCSI/ESDI/IDE) 分類 DISK BIOS 名前 初期化 (INITIALIZE) 対象 SASI, SCSI, ESDI, IDE 入力 AH=03h AL=DA/UA ------------+----------- デバイス種別|DA/UA値(xは任意) ------------+----------- SASI・IDE |0xh,8xh ESDI |0xh,8xh SCSI |2xh,Axh ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o コントローラ、ワークエリア等の初期化を行う。 システム起動時には、すでに初期化されている。 u ハードディスクの接続状況を調べ、システム共通域に登録する。 関連 0000:0460h 0000:0482h 0000:055Ch INT 1Bh - Function 04h(SASI/ESDI/IDE) 分類 DISK BIOS 名前 センス (SENSE) 対象 SASI, ESDI, IDE 入力 AH=04h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SASI・IDE |00h,01h,03h,80h,81h,83h ESDI |02h,82h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 0xh(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない 60h(CF=1)|Not Ready |デバイスが接続されていない■[ESDI] 90h(CF=1)|Time Out |デバイスが接続されていない■[SASI] ---------+------------------------------------------ ■AH=0xhのとき AH bit 3〜0=容量 0h: 5Mバイト 1h: 10Mバイト 2h: 15Mバイト 3h: 20Mバイト 4h: 25Mバイト 5h: 40Mバイト 9h: ESDI 100Mバイト Fh: IDE 80Mバイト以上 解説 o ハードディスクの容量を取得する。 u AHに返される容量を示す値は、INT 1Bh - Function 84h(SASI)の AHと異なるので注意。また、テクニカルデータブックの記述は実機での 実行結果と一致しない。 u ドライブが接続されていないとき、SASIとESDIはリターンコードで エラーを返す。IDEは常に正常終了する。 o ハードディスクの接続状況はシステム共通域(0000:055Ch bit 11〜8)に 示されている。 関連 INT 1Bh - Function 84h(SASI) 0000:055Ch bit 11〜8 INT 1Bh - Function 04h(SCSI) 分類 DISK BIOS 名前 レディ状態のセンス Undocumented 対象 SCSI(PC-9801-55初代を除く) 入力 AH=04h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SCSI |20〜26h,A0〜A6h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |デバイスはReady状態 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない 6xh(CF=1)|Not Ready |デバイスはNot Ready状態(MOやCD-ROMでディスクが |セットされていないときなど) 90h(CF=1)|Time Out |デバイスが接続されていない ---------+------------------------------------------ 解説 o ロジカルユニットの使用可否状態(レディ状態)をテストする。 o ハードディスクの接続状況は、システム共通域(0000:0482h)に示されている。 関連 INT 1Bh - Function 84h(SCSI) 0000:0482h INT 1Bh - Function 14h(SCSI) 分類 DISK BIOS 名前 デバイスタイプの取得 Undocumented 対象 SCSI(PC-9801-55初代を除く) 入力 AH=14h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SCSI |20〜26h,A0〜A6h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない 90h(CF=1)|Time Out |デバイスが接続されていない ---------+------------------------------------------ ■AH=00hのとき BH bit 7 = RMB(Removable) 1=交換可能媒体 0=交換不能媒体 BH bit 6〜0= Device Type Modifier BL bit 7,6= Peripheral Qualifier BL bit 5〜0= デバイスタイプ値 ------+-------------- BLの値|意味 ------+-------------- 00h |ハードディスク 01h |テープユニット 05h |CD-ROM 07h |3.5"MO 84h |5"MO ------+-------------- 解説 o SCSIデバイスにINQUIRYコマンドを発行して、デバイスの属性を得る。 INQUIRYデータの先頭2バイトをBXレジスタに返す。 関連 0000:0460h INT DCh - Function 09h Subfunction 0000h INT 1Bh - Function 24h(SCSI) 分類 DISK BIOS 名前 パラメータテーブルの設定 Undocumented 対象 SCSI(PC-9801-55初代を除く) 入力 AH=24h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SCSI |20〜26h,A0〜A6h ------------+----------- BX=セクタ長 CX=シリンダ数 DH=ヘッド数 DL=セクタ数/トラック 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o SCSIデバイスの諸元をシステム共通域(0000:0460〜047Fh)にセットする。 指定された諸元をシステム共通域に設定するだけなので、ドライブが接続 されていない場合でも必ず正常終了する。 o INT 1Bh - Function 84h(SCSI)で取得できる諸元は、 このファンクションでセットした値である。 o INT 1Bh - Function 44h(SCSI)で取得できるセクタの種類は、必ず ソフトセクタに設定される。 u BX=0000hで実行するとハングする。 関連 0000:0460h INT 1Bh - Function 84h(SCSI) INT 1Bh - Function 44h(SCSI) 分類 DISK BIOS 名前 センス2(SENSE2) 対象 SCSI 入力 AH=44h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SCSI |20〜26h,A0〜A6h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ ■AH=00hのとき BX=セクタの種類 0002h: ハードセクタ 0001h: ソフトセクタ 解説 o ディスクのセクタの種類を返す。 o システム共通域を参照してその結果を返すだけなので、ドライブが接続 されていない場合でも必ず正常終了する。 関連 0000:0460h INT 1Bh - Function 54h(ESDI) 分類 DISK BIOS 名前 NESAスロット取得 Undocumented 対象 ESDI 入力 AH=54h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- ESDI |02h,82h ------------+----------- BX=0000h 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ ■AH=00hのとき CH=製品コード ESDI HD=02h CL=論理スロット番号 HDC専用スロット=06h 解説 o HDCが実装されているスロット番号等を取得する。 関連 INT 1Fh - Function C0h INT 1Bh - Function 84h(SASI/ESDI/IDE) 分類 DISK BIOS 名前 新センス 対象 SASI(PC-9801-27を除く), ESDI, IDE 入力 AH=84h AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI・IDE |リニアセクタアドレス |00h,01h,03h SASI・IDE |絶対セクタアドレス |80h,81h,83h ESDI |リニアセクタアドレス |02h ESDI |絶対セクタアドレス |82h ------------+----------------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 0xh(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない 60h(CF=1)|Not Ready |デバイスが接続されていない■[ESDI] 90h(CF=1)|Time Out |デバイスが接続されていない■[SASI] ---------+------------------------------------------ ■AH=0xhのとき AH bit 3〜0=容量 00h: 5Mバイト 01h: 10Mバイト 02h: 15Mバイト 03h: 20Mバイト 05h: 25Mバイト 07h: 40Mバイト 09h: ESDI 100Mバイト 0Fh: IDE 80Mバイト以上 BX=セクタ長 0100h: 256バイト 0200h: 512バイト CX=シリンダ数-1 DH=ヘッド数 DL=セクタ数 解説 o ディスクの諸元を取得する。 u AHに返される容量を示す値は、INT 1Bh - Function 04h(SASI/ESDI/IDE)の AHと異なるので注意。また、テクニカルデータブックの記述は実機での 実行結果と一致しない。 CXにセットされる値は、テクニカルデータブックの記述とは異なり シリンダ数-1。 u ドライブが接続されていないとき、SASIとESDIはリターンコードで エラーを返す。IDEは常に正常終了する。 u PC-9801-27(5インチ固定ディスクインターフェースボード)上のBIOS、 PC-9801-07(5インチ固定ディスクインターフェースボード)をサポート するBIOSは、このファンクションをサポートしていない(PC-9801F3・M3・VM4 の内蔵型SASI BIOSは、これらの互換BIOSなので同様)。 ただし、MS-DOS 3.1(PS98-011)以降のMS-DOS環境下では、MS-DOSが このファンクションをトラップし、エミュレートしている。このとき、 0000:0480h bit 7=1になる。 u ハイレゾモードのSASI BIOS(本体F800hセグメント内)、PC-9801VX4以降の 内蔵型SASI BIOS、ESDI BIOS、IDE BIOSは、このファンクションをサポート している。 u このファンクションのサポートの有無は、以下のようにして判断する。 1. ハイレゾモードは、必ずサポートしている。 2. ノーマルモードでは、0000:0480h bit 7=1のとき、このファンクションが 使用できる。 3. ESDI BIOS(DA/UA=02h,03h,82h,83h)は、必ずサポートしている (0000:0480h bit 7は0)。 関連 INT 1Bh - Function 04h(SASI/ESDI/IDE) 0000:0480h bit 7 INT 1Bh - Function 84h(SCSI) 分類 DISK BIOS 名前 新センス 対象 SCSI 入力 AH=84h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SCSI |20〜26h,A0〜A6h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ ■AH=00hのとき BX=セクタ長 0100h: 256バイト 0200h: 512バイト 0400h: 1024バイト CX=シリンダ数-1 DH=ヘッド数 DL=セクタ数(1トラックあたり) 解説 o ディスクの諸元を取得する。 u CXにセットされるシリンダ数は、SCSIインタフェーステクニカルブックの 記述とは異なり、シリンダ数-1。 u システム共通域のパラメータテーブルを参照してその結果を返すだけなので、 ドライブが接続されていない場合でも必ず正常終了する。 u ハードディスク以外の装置の諸元を取得することはできない。ハードディスク 以外の装置の場合、システム共通域のパラメータテーブル(0000:0460h)には、 デバイスタイプ値などが格納されている。このファンクションを実行すると、 その内容をハードディスクの諸元と同じように解釈して意味のない値を返す だけである。 u 3.5"MO、5"MOが接続されている場合、SCSI BIOSはシステム共通域の パラメータテーブル(0000:0460h)にデバイスタイプ値を格納する。 ところが、MS-DOS 5.0はこのパラメータテーブルをMOの諸元にあわせて 書き換える。このため、MS-DOS 5.0環境下ではMOの諸元が得られる。 u このファンクションで得られる諸元は、必ずしもハードディスクの物理的な 構造と一致しているとは限らない。 関連 0000:0460h INT 1Bh - Function 05h(SASI/SCSI/ESDI/IDE) 分類 DISK BIOS 名前 データの書き込み (WRITE DATA) 対象 SASI, SCSI, ESDI, IDE 入力 AH= ■[SASI・ESDI・IDE] bit 7,6=00b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=0101b ■[SCSI] bit 7=0 bit 6=e 1=エラーセクタ通知あり 0=エラーセクタ通知なし bit 5,4=00b bit 3〜0=0101b AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI・IDE |リニアセクタアドレス |00h,01h,03h SASI・IDE |絶対セクタアドレス |80h,81h,83h ESDI |リニアセクタアドレス |02h ESDI |絶対セクタアドレス |82h SCSI |リニアセクタアドレス |20〜26h SCSI |絶対セクタアドレス |A0〜A6h ------------+----------------------+----------- BX=転送バイト数 ■リニアセクタアドレス指定時 DX:CX=リニアセクタアドレス(0〜) ■絶対セクタアドレス指定時 CX=シリンダ番号(0〜) DH=ヘッド番号(0〜) DL=セクタ番号(0〜) ES:BP=転送アドレス 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 ■[SCSI] AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき DX,CX=エラーセクタアドレス 解説 o 指定されたセクタにデータを書き込む。 リニアセクタアドレス指定を用いれば、MOへの書き込みも行える。 o ES:BP(転送アドレス)とBX(転送バイト数)は、転送領域が物理アドレスの 64Kバイトの境界を跨がないように設定する必要がある。たとえば、 ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。 これに反したとき、SASI・ESDI・IDE BIOSではDMAバウンダリエラーが起きる。 u SCSI BIOSはDMAバウンダリのチェックをしていない。転送領域がセグメントを 跨いでいると、セグメント内でラップアラウンドが起きるので注意が必要。 o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。 セクタ長で割り切れない値を指定すると、端数は切り捨てられる。 u BX(転送バイト数)に0000hを指定すると、64Kバイトの転送を 行う。(Undocumented) ただし、転送を行わずに異常終了するBIOSもある模様。 u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SASI・ESDI BIOSはハング する。SCSI BIOSは転送せずに正常終了する。IDE BIOSは64Kバイト転送する が、DMAバウンダリのチェックをしない。転送領域がセグメントを跨いで いると、セグメント内でラップアラウンドが起きるので注意が必要。 o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6 (SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する 場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この ビットが0のときは、従来互換のダイレクトモードである。 ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、 インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ 上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの アドレスを指定する。 インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに 戻される。 関連 INT 1Bh - Function 02h(SCSI) INT 1Bh - Function 06h(SASI/SCSI/ESDI/IDE) 分類 DISK BIOS 名前 データの読み出し (READ DATA) 対象 SASI, SCSI, ESDI, IDE 入力 AH= ■[SASI・ESDI・IDE] bit 7,6=00b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=0110b ■[SCSI] bit 7=0 bit 6=e 1=エラーセクタ通知あり 0=エラーセクタ通知なし bit 5,4=00b bit 3〜0=0110b AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI・IDE |リニアセクタアドレス |00h,01h,03h SASI・IDE |絶対セクタアドレス |80h,81h,83h ESDI |リニアセクタアドレス |02h ESDI |絶対セクタアドレス |82h SCSI |リニアセクタアドレス |20〜26h SCSI |絶対セクタアドレス |A0〜A6h ------------+----------------------+----------- BX=転送バイト数 ■リニアセクタアドレス指定時 DX:CX=リニアセクタアドレス(0〜) ■絶対セクタアドレス指定時 CX=シリンダ番号(0〜) DH=ヘッド番号(0〜) DL=セクタ番号(0〜) ES:BP=転送アドレス 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 ■[SCSI] AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき DX,CX=エラーセクタアドレス 解説 o 指定されたセクタからデータを読み込む。 リニアセクタアドレス指定を用いれば、MOやCD-ROM(SCSI)からの読み込みも 行える。ただし、IDE CD-ROMからの読み込みは、INT 1Bh - Function 16h (IDE CD-ROM)を利用する。 o ES:BP(転送アドレス)とBX(転送バイト数)は、転送領域が物理アドレスの 64Kバイトの境界を跨がないように設定する必要がある。たとえば、 ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。 これに反したとき、SASI・ESDI・IDE BIOSではDMAバウンダリエラーが起きる。 u SCSI BIOSはDMAバウンダリのチェックをしていない。転送領域がセグメントを 跨いでいると、セグメント内でラップアラウンドが起きるので注意が必要。 o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。 セクタ長で割り切れない値を指定すると、端数は切り捨てられる。 u BX(転送バイト数)に0000hを指定すると、64Kバイトの転送を 行う。(Undocumented) ただし、転送を行わずに異常終了するBIOSもある模様。 u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SASI・ESDI BIOSはハング する。SCSI BIOSは転送せずに正常終了する。IDE BIOSは64Kバイト転送する が、DMAバウンダリのチェックをしない。転送領域がセグメントを跨いで いると、セグメント内でラップアラウンドが起きるので注意が必要。 o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6 (SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する 場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この ビットが0のときは、従来互換のダイレクトモードである。 ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、 インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ 上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの アドレスを指定する。 インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに 戻される。 関連 INT 1Bh - Function 16h(IDE CD-ROM) INT 1Bh - Function 07h(SASI/SCSI/ESDI/IDE) 分類 DISK BIOS 名前 シリンダ0へシークする (RECALIBRATE) 対象 SASI, SCSI, ESDI, IDE 入力 AH= ■[SASI・ESDI・IDE] bit 7,6=00b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=0111b ■[SCSI] 07h AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI・IDE |リニアセクタアドレス |00h,01h,03h SASI・IDE |絶対セクタアドレス |80h,81h,83h ESDI |リニアセクタアドレス |02h ESDI |絶対セクタアドレス |82h SCSI |リニアセクタアドレス |20〜26h SCSI |絶対セクタアドレス |A0〜A6h ------------+----------------------+----------- 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 解説 o シリンダ0にシークする。 関連 INT 1Bh - Function 08h(IDE) 分類 DISK BIOS 名前 HD CACHE制御 Undocumented 対象 IDE(PC-9821Ap2・As2・Bf・Bp・Bs・Be・Cs2・Ce2・Ts, PC-9801BX2・BS2・BA2) 入力 AH=08h AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- IDE |00h,01h,80h,81h ------------+----------- DL=キャッシング状態 00h=キャッシュOFF 01h=キャッシュON FFh=キャッシュ状態取得 出力 AH=出力ステータス DL=キャッシング状態 00h=キャッシュOFF 01h=キャッシュON 解説 o キャッシュ状態をコントロールする。 関連 INT 1Bh - Function 08h(SASI) 分類 DISK BIOS 名前 代替トラックの指定 (ASSIGN ALTERNATE TRACK) 対象 SASI 入力 AH=08h AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI |リニアセクタアドレス |00h,01h SASI |絶対セクタアドレス |80h,81h ------------+----------------------+----------- BX=04h(バッファ長) ■リニアセクタアドレス指定時 DX:CX=代替トラック上のセクタアドレス(0〜) ■絶対セクタアドレス指定時 CX=代替トラックのシリンダ番号(0〜) DH=代替トラックのヘッド番号(0〜) DL=00h ES:BP=代替トラックアドレスを格納する4バイトのバッファアドレス 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o INT 1Bh - Function 0Bh(SASI)とペアで、代替トラックの割り当て処理に 使用する。 ハードディスクコントローラに代替トラックアドレスを通知する。 u '86年版テクニカルデータブックにのみこのファンクションの解説が 掲載されている。 関連 INT 1Bh - Function 0Bh(SASI) INT 1Bh - Function 09h(SCSI/ESDI) 分類 DISK BIOS 名前 トラック/セクタの代替処理 (REASSIGN BLOCKS) 対象 SCSI, ESDI 入力 AH= ■[SCSI] AH=09h ■[ESDI] bit 7,6=00b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=1001b AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- ESDI |02h,82h SCSI |20〜26h,A0〜A6h ------------+----------- BX=DEFECT LISTバッファのバイト数 ES:BP=DEFECT LISTバッファの先頭アドレス <DEFECT LISTの形式> ----------------+------------------------- アドレス |内容 ----------------+------------------------- ES:BP+00h(WORD) |0000h ES:BP+02h(WORD) |不良セクタ情報の数×4 ES:BP+04h(DWORD)|不良セクタの論理アドレス1 : | : ES:BP+xxh(DWORD)|不良セクタの論理アドレスn ----------------+------------------------- * 不良セクタの論理アドレスは昇順に格納する 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない, |指定されたデバイスは存在しない 98h(CF=1)|Defect List Error |DEFECT LISTの読み込み中にエラーが起こった A8h(CF=1)|No Defect Spare Location |代替領域がなくなったため、代替処理ができない ---------+------------------------------------------ 解説 o 不良トラックに代替トラックを割り当てる。 o SCSI HDの場合、ソフトセクタのディスクではトラック単位で、 ハードセクタのディスクではセクタ単位で代替が行われる。 関連 INT 1Bh - Function 0Ch(SCSI/ESDI) INT 1Bh - Function 8Ch(SCSI/ESDI) INT 1Bh - Function 0Ah(SCSI/ESDI) 分類 DISK BIOS 名前 セクタ長の指定 (SET SECTOR) 対象 SCSI,ESDI 入力 AH=0Ah AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- ESDI |02h,82h SCSI |20〜26h,A0〜A6h ------------+----------- BH=セクタ長 01h= 256バイト(SCSI, ESDI 40MB, ESDI 100MB) 02h= 512バイト(SCSI, ESDI 40MB) 04h=1024バイト(SCSI) 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない |指定されたデバイスは存在しない |不正なセクタ長が指定された ---------+------------------------------------------ 解説 o INT 1Bh - Function 0Dh(SCSI/ESDI)でフォーマットするときの セクタ長を指定する。 関連 INT 1Bh - Function 0Dh(SCSI/ESDI) INT 1Bh - Function 0Bh(SASI) 分類 DISK BIOS 名前 不良トラックに代替トラック割当 (FORMAT BAD TRACK) 対象 SASI 入力 AH=0Bh AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI |リニアセクタアドレス |00h,01h SASI |絶対セクタアドレス |80h,81h ------------+----------------------+----------- BX=04h(バッファ長) ■リニアセクタアドレス指定時 DX:CX=不良トラック上のセクタアドレス(0〜) ■絶対セクタアドレス指定時 CX=不良トラックのシリンダ番号(0〜) DH=不良トラックのヘッド番号(0〜) DL=00h ES:BP=代替トラックアドレスが格納されているバッファアドレス * 直前にINT 1Bh - Function 08h(SASI)を実行したときと同じアドレス 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 解説 o INT 1Bh - Function 08h(SASI)とペアで、代替トラックの割り当て処理に 使用する。 不良トラックに代替トラックを割り当てる。 u '86年版テクニカルデータブックにのみこのファンクションの解説が 掲載されている。 関連 INT 1Bh - Function 08h(SASI) INT 1Bh - Function 0Ch(SCSI/ESDI) 分類 DISK BIOS 名前 不良セクタリストの取得 (READ DEFECT DATA) 対象 SCSI, ESDI 入力 AH= ■[SCSI] AH=0Ch ■[ESDI] bit 7,6=00b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=1100b AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- ESDI |02h,82h SCSI |20〜26h,A0〜A6h ------------+----------- BX=DEFECT LISTバッファのバイト数 ES:BP=DEFECT LISTバッファの先頭アドレス * DEFECT LISTの形式は、INT 1Bh - Function 09h(SCSI/ESDI)と同じ 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない, |指定されたデバイスは存在しない 98h(CF=1)|Defect List Error |DEFECT LISTの読み込み中にエラーが起こった ---------+------------------------------------------ 解説 o BX(DEFECT LISTバッファのバイト数)は、INT 1Bh - Function 8Ch(SCSI/ESDI) を実行してCXに返される値から計算する。バッファの大きさはCX×4+4バイト 必要。 関連 INT 1Bh - Function 09h(SCSI/ESDI) INT 1Bh - Function 8Ch(SCSI/ESDI) INT 1Bh - Function 8Ch(SCSI/ESDI) 分類 DISK BIOS 名前 不良セクタ数の取得 (READ DEFECT NUMBER) 対象 SCSI, ESDI 入力 AH= ■[SCSI] AH=8Ch ■[ESDI] bit 7,6=10b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=1100b AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- ESDI |02h,82h SCSI |20〜26h,A0〜A6h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない, |指定されたデバイスは存在しない 98h(CF=1)|Defect List Error |DEFECT LISTの読み込み中にエラーが起こった ---------+------------------------------------------ CX=代替されている不良セクタの個数 解説 o 代替されている不良セクタの個数を取得する。 関連 INT 1Bh - Function 09h(SCSI/ESDI) INT 1Bh - Function 0Ch(SCSI/ESDI) INT 1Bh - Function 0Dh(SASI/IDE) 分類 DISK BIOS 名前 フォーマット(FORMAT TRACK/DRIVE) 対象 SASI, IDE 入力 AH bit 7=フォーマット単位の指定 1: ドライブ単位 0: トラック単位 bit 6=0 bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=1101b AL=DA/UA ------------+----------------------+----------- デバイス種別|セクタアドレス指定方法|DA/UA値 ------------+----------------------+----------- SASI・IDE |絶対セクタアドレス |80h,81h,83h ------------+----------------------+----------- BH=インターリーブファクタ(通常は05hを指定) CX=シリンダ番号(AH bit 7=1のときは0000hを指定) DH=ヘッド番号 (AH bit 7=1のときは00hを指定) DL=00h 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 解説 o トラック単位またはドライブ単位でフォーマットを行う。 u IDE HDでは、トラック単位を指定したとき、なにもせずに正常終了する。 ドライブ単位を指定したときは、実際にはフォーマット処理を行わず、 ディスク先頭の16KバイトにE5hを書き込み正常終了する。 関連 INT 1Bh - Function 0Dh(SCSI/ESDI) 分類 DISK BIOS 名前 フォーマット(FORMAT DRIVE/TRACK) 対象 SCSI, ESDI 入力 AH bit 7 =フォーマット単位の指定 1: ドライブ単位 0: トラック単位(指定不可) bit 6〜4=000b bit 3〜0=1111b AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- ESDI |02h,82h SCSI |20〜26h,A0〜A6h ------------+----------- 出力 CF=終了条件 1=異常終了 0=正常終了 AH=ステータス情報 解説 o フォーマットを行う。 トラック単位を指定すると、実際にはなにもせずに終了する。 o フォーマットの前にINT 1Bh - Function 0Ah(SCSI/ESDI)で セクタ長を指定する。 関連 INT 1Bh - Function 0Ah(SCSI/ESDI) INT 1Bh - Function 0Eh(SASI/ESDI/IDE) 分類 DISK BIOS 名前 モード設定(MODE SET) Undocumented 対象 SASI, ESDI, IDE(ノーマルモードのみ) 入力 AH bit 7=モード 1: 薄型(ハーフハイト)指定 0: 厚型(フルハイト)指定 bit 6〜0=0001110b AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SASI・IDE |00h,01h,03h,80h,81h,83h ESDI |02h,82h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない ---------+------------------------------------------ 解説 o AH bit 7で指定されたモードにより、システム共通域内のポインタとフラグを 変更する。そのアドレスとビット位置を以下の表に示す。 -------+-----------------+---------------- DA/UA |ポインタの位置 |フラグの位置 -------+-----------------+---------------- 80h,00h|0000:05E8h(DWORD)|0000:0481h bit 0 81h,01h|0000:05ECh(DWORD)|0000:0481h bit 1 82h,02h|D000:005Ah(DWORD)|0000:0590h bit 0 83h,03h|D000:005Eh(DWORD)|0000:0590h bit 1 -------+-----------------+---------------- * ESDI HDのポインタは、ESDI BIOSのセグメントに存在する。 o AH bit 7=0(厚型指定)のとき、パラメータテーブルへのポインタを 20MBフルハイトドライブ用に切り替える(パラメータテーブルはHD BIOS内)。 AH bit 7=1(薄型指定)のとき、パラメータテーブルへのポインタを 20MBハーフハイトドライブ用に切り替える(パラメータテーブルはHD BIOS内)。 o フラグは、モードとドライブのセクタ長から、以下の表の通りに設定される。 ----------------+---------+------ モード(AH bit 7)|セクタ長 |フラグ ----------------+---------+------ 0 |256バイト|0 0 |512バイト|1 1 |256バイト|0 1 |512バイト|0 ----------------+---------+------ 関連 0000:0481h bit 1,0 0000:0590h bit 1,0 0000:05E8h 0000:05ECh INT 1Bh - Function 0Fh(SASI/SCSI/ESDI/IDE) 分類 DISK BIOS 名前 リトラクト(RETRACT) 対象 SASI, SCSI, ESDI, IDE 入力 AH= ■[SASI,ESDI,IDE] bit 7,6=00b bit 5=r 1=リトライなし 0=8回リトライ bit 4=0 bit 3〜0=1111b ■[SCSI] AH=0Fh AL=DA/UA ------------+----------- デバイス種別|DA/UA値 ------------+----------- SASI |00h,01h,03h,80h,81h,83h ESDI |02h,82h SCSI |20〜26h,A0〜A6h ------------+----------- 出力 AH=リターンコード ---------+------------------------------------------ AH |内容 ---------+------------------------------------------ 00h(CF=0)|Normal End |正常終了 40h(CF=1)|Equipment Check |DAで指定されたBIOSは存在しない, |指定されたデバイスはリトラクトできない 60h(CF=1)|Not Ready |デバイスの準備ができていない 90h(CF=1)|Time Out |デバイスが接続されていない ---------+------------------------------------------ 解説 o ヘッドを不使用シリンダに移動する。 o IDE HDでは、なにもせずに正常終了する。 関連